//
// Created by 29245 on 2025/8/28.
//

#ifndef ZHIZHU_ACTION_H
#define ZHIZHU_ACTION_H
#include "stdint.h"

// 站立姿态默认参数
#define STAND_DEFAULT_BODY_ANGLE 0.0f
#define STAND_DEFAULT_LIMB_ANGLE 30.0f
#define STAND_DEFAULT_FOOT_ANGLE 40.0f
#define STAND_DEFAULT_HEIGHT -60.42f

#define X1 140.0f
#define Y2 120.0f
#define Y1 70.0f
// 各腿站立时的脚尖坐标位置
#define P1X X1
#define P1Y Y1

#define P2X 0.0f
#define P2Y Y2

#define P3X -X1
#define P3Y Y1

#define P4X -X1
#define P4Y -Y1

#define P5X 0.0f
#define P5Y -Y2

#define P6X X1
#define P6Y -Y1
#define M_PI 3.14159265358979323846f

// 控制模式定义
typedef enum {
    CONTROL_MODE_IDLE,          // 空闲模式
    CONTROL_MODE_BUTTON,        // 按键控制模式
    CONTROL_MODE_JOYSTICK,     // 摇杆控制模式
    CONTROL_MODE_HEIGHT         // 高度控制模式
} control_mode_t;

// 摇杆控制状态
typedef enum {
    JOYSTICK_STATE_IDLE,        // 空闲状态
    JOYSTICK_STATE_MOVING,      // 正在移动状态
    JOYSTICK_STATE_STOPPING     // 停止中状态
} joystick_state_t;

// 旋转控制状态
typedef enum {
    ROTATION_STATE_IDLE,        // 空闲状态
    ROTATION_STATE_ROTATING,    // 正在旋转状态
    ROTATION_STATE_STOPPING     // 停止中状态
} rotation_state_t;

// 函数声明
void action_stand(void);

void action_move_to_direction(float target_x, float target_y, uint32_t duration_ms);
void action_move_by_joystick(int ps2_lx, int ps2_ly); // 摇杆控制函数
void action_stop_continuous(void);
void action_move_execute(void);

// 添加旋转动作函数声明
void action_turn_left_start(void);   // 逆时针旋转启动函数
void action_turn_right_start(void);  // 顺时针旋转启动函数
void action_turn_stop(void);         // 旋转停止函数

// 控制模式状态机函数
void action_set_control_mode(control_mode_t mode);
control_mode_t action_get_control_mode(void);
void action_update_control_mode(uint8_t ps2_mode, int ps2_lx, int ps2_ly);

// 摇杆控制使能函数
void action_enable_joystick_control(uint8_t enable);
uint8_t action_is_joystick_control_enabled(void);
void action_stand_at_height(float height);  // 新增: 指定高度站立

void action_body_sway(int direction, float amplitude, int speed);// 身体摇摆
void action_body_twist(float angle, int speed);// 身体旋转
void action_body_wave(float amplitude, int speed);// 身体波动
void action_body_combine(int speed);// 身体组合动作
void action_nod_head(int count, int speed);// 点头

void action_handshake(int speed);// 握手
void action_squat_stand(int count, int speed);// 蹲下站立
void action_stretch(int speed);// 伸展
void action_cross_step(int count, int speed);// 交叉步
void action_tip_toe(int count, int speed);// 提踵
void action_spiral_twist(int count, int speed);// 螺旋旋转
void action_robot_dance(int count, int speed);// 机器人舞蹈
void action_wave_dance(int count, int speed);// 波形舞蹈
void action_disco_dance(int count, int speed);// 迪斯科舞蹈
void action_jump(int count, int speed);// 弹跳
void action_wave_hand(int count, int speed);// 挥手

void action_move_forward(float distance, int speed);// 向前移动
void action_move_backward(float distance, int speed);// 向后移动
void action_move_left(float distance, int speed);// 向左移动
void action_move_right(float distance, int speed);// 向右移动
void action_turn_left(float angle, int speed);
void action_turn_right(float angle, int speed);


#endif //ZHIZHU_ACTION_H
